package top.jiangqiang.qyblog.core.storage;

import top.jiangqiang.qyblog.core.domain.entity.File;
import top.jiangqiang.qyblog.core.domain.entity.Storage;

import java.io.InputStream;
import java.util.function.Consumer;

/**
 * @author Jiangqiang
 * @version 1.0
 * @date 2022/12/7 13:45
 */
public interface StorageClient extends AutoCloseable {

    /**
     * 测试存储器是否可用
     * 如果可用，则可能需要手动关闭
     *
     * @return
     */
    boolean test();

    /**
     * 获取存储器配置
     *
     * @return
     */
    Storage getStorage();

    /**
     * @param file             file表中的对象
     * @param inputStream      文件流
     * @param completeCallback 上传完毕回调，成功或失败都会执行
     */
    void upload(File file, InputStream inputStream, Consumer<File> completeCallback);

    /**
     * 缓存存储目录
     *
     * @return
     */
    java.io.File getCacheDir();

    /**
     * 获取上传到当前存储器后的文件访问链接
     *
     * @param fileKey
     * @return
     */
    String getUrl(String fileKey);

    /**
     * 删除文件
     *
     * @param fileKey
     * @return
     */
    boolean delete(String fileKey);
}
